#include "ListaDeNodosOrdenados.h"
#include <iostream>

using namespace std;

ListaDeNodosOrdenados::ListaDeNodosOrdenados() {
	this->cantidadMaxima = 514;
	this->cantidadActual = 0;
};

// Agrega el nodo en orden
void ListaDeNodosOrdenados::agregarNodo(NodoArbolHuffman* nodo) {
	this->nodos[this->cantidadActual] = nodo;
	this->cantidadActual++;
};

// Dada una frecuencia, devuelve el bloque de maximo orden (numero) que tenga esa frecuencia.
NodoArbolHuffman* ListaDeNodosOrdenados::buscarMaxEnBloque(unsigned int frecuencia) {
	unsigned int contador = 0;
	//TODO: Optimizar busqueda
	while (contador < this->cantidadActual) {
		if (nodos[contador]->getFrecuencia() == frecuencia) {
			return nodos[contador];
		}
		contador++;
	}
	return 0;
};

// Intercambia dos nodos
void ListaDeNodosOrdenados::intercambiarNodos(unsigned int numeroNodoActual, unsigned int numeroNodoMax) {
	NodoArbolHuffman* nodoTemp = nodos[514-numeroNodoActual];
	nodos[514-numeroNodoActual] = nodos[514-numeroNodoMax];
	nodos[514-numeroNodoMax] = nodoTemp;
	// No tengo idea si esto funciona
	nodoTemp = 0;
	delete nodoTemp;
}

// Devuelve el nodo en la lista que tenga el caracter deseado
NodoArbolHuffman* ListaDeNodosOrdenados::buscarCaracter(unsigned int caracter) {
	unsigned int i = 0;
	while (i < this->cantidadActual) {
		if (nodos[i]->getCaracter() == caracter) {
			return nodos[i];
		}
		i++;
	}
	return 0;
}
